package com.example.chapter03;
// 导入Android基础组件类：Bundle用于数据传递，View/Button/TextView是UI控件
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

// 导入AndroidX支持库类：用于兼容不同版本系统，实现现代UI特性
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

// 导入自定义工具类：用于获取当前时间（示例中用于生成点击时间戳）
import com.example.chapter03.Utils.DateUtil;

/**
 * 按钮点击事件处理示例Activity
 * 演示两种点击事件处理方式：
 * 1. 自定义监听器类（MyOnClickListener）
 * 2. Activity自身实现OnClickListener接口
 */
public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener {

    // 成员变量：用于显示点击结果的文本视图
    // 定义为类成员变量，方便在整个Activity的所有方法中访问（跨方法操作控件）
    private TextView tv_result;

    /**
     * Activity生命周期的核心方法：创建时调用，用于初始化界面和数据
     * @param savedInstanceState 用于恢复Activity状态的 Bundle 对象（如横竖屏切换时保存数据）
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 启用"边缘到边缘"显示模式（让内容延伸到状态栏和导航栏下方，现代UI设计）
        EdgeToEdge.enable(this);
        // 设置当前Activity的布局文件（关联res/layout/activity_button_click.xml）
        setContentView(R.layout.activity_button_click);

        // 初始化文本视图：通过控件ID从布局中找到tv_result实例，后续用于更新显示内容
        tv_result = findViewById(R.id.tv_result);

        // 初始化第一个按钮："单独监听器"按钮
        Button btn_click_single = findViewById(R.id.btn_click_single);
        // 给按钮设置点击监听器：使用自定义的MyOnClickListener，并传入tv_result（让监听器能操作文本视图）
        btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));

        // 初始化第二个按钮："公共监听器"按钮
        Button btn_click_public = findViewById(R.id.btn_click_public);
        // 给按钮设置点击监听器：当前Activity（this）实现了OnClickListener接口，因此直接传this
        btn_click_public.setOnClickListener(this);

    }

    /**
     * 实现View.OnClickListener接口的抽象方法：处理点击事件
     * 当设置了this作为监听器的控件被点击时，会自动调用此方法
     * @param v 被点击的控件实例（通过v.getId()可区分不同控件）
     */
    @Override
    public void onClick(View v) {
        // 判断点击的是"公共监听器"按钮（通过控件ID区分，避免多个控件共用监听器时混淆）
        if (v.getId() == R.id.btn_click_public) {
            // 拼接点击信息：当前时间 + 被点击按钮的文本
            // DateUtil.getNowTime()：自定义工具类方法，返回格式化的当前时间（如"2025-10-21 15:30:22"）
            // ((Button) v).getText()：将被点击的View强转为Button，获取其显示的文本
            String desc = String.format("%s 您点击了按钮： %s", DateUtil.getNowTime(), ((Button) v).getText());
            // 更新文本视图内容，显示点击结果
            tv_result.setText(desc);
        }
    }

    /**
     * 自定义静态内部类：实现View.OnClickListener接口，作为"单独监听器"按钮的点击处理器
     * 静态内部类的优势：不依赖外部Activity实例，减少内存泄漏风险
     */
    static class MyOnClickListener implements View.OnClickListener {

        // 成员变量：用于接收外部传入的文本视图，在点击时更新显示
        private final TextView tv_result;

        /**
         * 构造方法：接收外部的TextView实例，保存到成员变量中
         * @param tv_result 用于显示点击结果的文本视图
         */
        public MyOnClickListener(TextView tv_result) {
            this.tv_result = tv_result;
        }

        /**
         * 处理"单独监听器"按钮的点击事件
         * @param v 被点击的控件（此处为btn_click_single按钮）
         */
        @Override
        public void onClick(View v) {
            // 拼接点击信息：格式与公共监听器一致，确保用户体验统一
            String desc = String.format("%s 您点击了按钮： %s", DateUtil.getNowTime(), ((Button) v).getText());
            // 通过构造方法传入的tv_result，更新显示内容
            tv_result.setText(desc);
        }
    }
}